import axios from 'axios'
import store from 'store'

import {
  throwErr
} from './util'
//本地
let this_url = 'http://localhost:80';
//正式
//let _url = getContextPath();   //正式

function getContextPath() {
  let pathName = document.location.toString();
  let strChar = "/";
  let num = 3;
  let index = pathName.indexOf(strChar);
  for (let i = 0; i < num; i++) {
    index = pathName.indexOf(strChar, index + 1);
  }
  return pathName.substr(0, index + 1);
}

//过滤请求
axios.interceptors.request.use(config => {
  //config 为请求的一些配置 例如：请求头 请求时间 Token  可以根据自己的项目需求个性化配置，参考axios的中文说明手册
  // 判断是否存在token，如果存在的话，则每个http header都加上token
  config.headers['Authorization'] = sessionStorage.getItem("token")
  config.timeout = 10 * 10000; //请求响应时间
  return config
}, error => {
  return Promise.reject(error)
});
// 添加响应拦截器
axios.interceptors.response.use(
  response => {
    if (response.status === 200) { //服务端定义的响应code码为0时请求成功
      return Promise.resolve(response.data) //使用Promise.resolve 正常响应
    } else {
      return Promise.reject(response.data)
    }
  },
  error => {
    // console.log('error:' + JSON.stringify(error));
    if (error && error.response) {
      let res = {};
      res.code = error.response.status;
      res.msg = throwErr(error.response.status, error.response); //throwErr 捕捉服务端的http状态码 定义在utils工具类的方法
      return Promise.reject(res)
    }
    return Promise.reject('网络错误，请重试')
  }
);

function request(method, url, data) { //暴露 request 给我们好API 管理
  method = method.toLocaleLowerCase(); //封装RESTful API的各种请求方式 以 post get delete为例
  let all_url = this_url + url;
  if (typeof data === 'undefined' || data === "" || JSON.stringify(data) === '{}') {
    data = {};
  }
  if (method === 'post') {
    return axios.post(all_url, data) //axios的post 默认转化为json格式
  } else if (method === 'get') {
    return axios.get(all_url, {
      params: data
    })
  } else if (method === 'delete') {
    return axios.delete(all_url, {
      params: data
    })
  }
}

export {
  request
}
